# -*- coding: utf-8 -*-

#importacao of the modulos
#Joao Alturas_6197
#2013_11_15

import csv
import sys
import numpy as np
import matplotlib.pyplot as plt

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

from sqlalchemy import Column, Integer, String, func

from sqlalchemy.ext.declarative import declarative_base


engine = create_engine('sqlite:///treta.db')

Base = declarative_base()

class Dados(Base):
	__tablename__ = 'dados'	
	id = Column(Integer, primary_key=True)					
	codIntituicao = Column(String(50))
	codCurso = Column(String(20)) 	 
	nomeInstituicao = Column(String(100))     
	nomeCurso = Column(String(100))   
	grau = Column(String(50)) 
	vagasIniciais = Column(String(20)) 
	colocados = Column (String(20))  
	notaUltCand = Column (String(20))  
	vagasSobrantes = Column (String(20)) 
	
    
	def __init__(self, 
		codIntituicao,
		codCurso,
		nomeInstituicao,
		nomeCurso,
		grau,
		vagasIniciais,
		colocados,
		notaUltCand,
		vagasSobrantes):								 
			self.codIntituicao = codIntituicao
			self.codCurso = codCurso	 
			self.nomeInstituicao = nomeInstituicao
			self.nomeCurso = nomeCurso
			self.grau = grau
			self.vagasIniciais = vagasIniciais
			self.colocados = colocados
			self.notaUltCand = notaUltCand
			self.vagasSobrantes = vagasSobrantes
            
Base.metadata.create_all(engine)


Session = sessionmaker(bind=engine)
session = Session()

distritos = ["Aveiro", "Braga", "Braganca", "VilaReal", "Viana do Castelo", "Porto", 
			 "Guarda", "Castelo Branco", "Viseu", "Coimbra", " Portalegre",
			"Evora", " Setubal", "Lisboa", "Leiria", "Beja", "Faro", "Santarem", "Madeira", "Acores" ]


			
colocados = [12,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


#Numero de alunos colocados por instituicao?

filename = "output0.csv"

spamWriter = csv.writer(open(filename, 'w'), delimiter=',', quotechar='\x22', quoting=csv.QUOTE_MINIMAL)

result = session.query(Dados.nomeInstituicao, func.sum(Dados.colocados).label('total_colocados')).group_by(Dados.codIntituicao).all()		
for obj in result:
	print obj.nomeInstituicao, obj.total_colocados
	spamWriter.writerow([obj.nomeInstituicao.encode('utf-8')] + [obj.total_colocados])
	
# imprime no grafico

y_pos = np.arange(len(total_colocados))

performance = np.arange(len(total_colocados))

error = np.arange(len(total_colocados))

plt.barh(y_pos, performance, xerr=error, align='center', alpha=0.4)

plt.yticks(y_pos, total_colocados )

plt.xlabel('Instituicao')

plt.grid(True)

plt.title('Numero de alunos colocados por instituicao')

plt.grid(True)

plt.show()




#Numero de vagas sobrantes por  instituicao e distrito?


############ Este esta a funncionar##########

"""

filename = "output1.csv"

spamWriter = csv.writer(open(filename, 'w'), delimiter=',', quotechar='\x22', quoting=csv.QUOTE_MINIMAL)

x = 0
for distrito in distritos:
	for obj in session.query(Dados).filter(Dados.nomeInstituicao.like("%" + distrito + "%")):
		alunos[x] = alunos[x] + int(obj.vagasSobrantes)
	spamWriter.writerow([distrito.encode('utf-8')] + [alunos[x]])
	x = x + 1

# imprime no grafico

plt.xlabel('Instituicao')

plt.ylabel('n. Alunos')

plt.title(' Numero de Vagas por colocar por Distrito')


x = 0

#vagas sobrantes
#vai percorrer o distrito desde o primeiro ate ao comprimento 

b = lambda:range(1, len(distritos) + 1)

plt.plot(b(), alunos)

locs, labels = plt.xticks(b(), distritos)

plt.setp(labels, 'rotation', 'vertical')

plt.suptitle("ESTATISTICAS", fontsize=20)

plt.grid(True)

plt.show()
"""


# Numero de alunos colocados por Distrito ?
"""
filename = "output2.csv"

spamWriter = csv.writer(open(filename, 'w'), delimiter=',', quotechar='\x22', quoting=csv.QUOTE_MINIMAL)

x = 0
for distrito in distritos:
	for obj in session.query(Dados).filter(Dados.nomeInstituicao.like("%" + colocados + "%")):
		colocados[x] = colocados[x] + int (obj.colocados)
	spamWriter.writerow([colocados.encode('utf-8')] + [colocados[x]])
	x = x + 1
"""	

# A permilagem de alunos por Distrito

"""
filename = "output3.csv"

spamWriter = csv.writer(open(filename, 'w'), delimiter=',', quotechar='\x22', quoting=csv.QUOTE_MINIMAL)

x = 0
for distrito in distritos:
	for obj in session.query(Dados).filter(Dados.nomeInstituicao.like("%" + colocados + "%")):
		colocados[x] = colocados[x] + int (obj.colocados)
	spamWriter.writerow([colocados.encode('utf-8')] + [colocados[x]])
	x = x + 1
"""	

# A percentagem de alunos colocados por instituicao em relação a todos os alunos colocados
"""
filename = "output4.csv"

spamWriter = csv.writer(open(filename, 'w'), delimiter=',', quotechar='\x22', quoting=csv.QUOTE_MINIMAL)

x = 0
for distrito in distritos:
	for obj in session.query(Dados).filter(Dados.nomeInstituicao.like("%" + colocados + "%")):
		colocados[x] = colocados[x] + int (obj.colocados)
	spamWriter.writerow([colocados.encode('utf-8')] + [colocados[x]])
	x = x + 1
"""	
# O numero de vagas por colocar por instituicao

"""
filename = "output5.csv"

spamWriter = csv.writer(open(filename, 'w'), delimiter=',', quotechar='\x22', quoting=csv.QUOTE_MINIMAL)

x = 0
for distrito in distritos:
	for obj in session.query(Dados).filter(Dados.nomeInstituicao.like("%" + colocados + "%")):
		colocados[x] = colocados[x] + int (obj.colocados)
	spamWriter.writerow([colocados.encode('utf-8')] + [colocados[x]])
	x = x + 1
	
"""

# O Numero de vagas por colocar por Distrito




# Grafico de barras
"""
y_pos = np.arange(len(distritos))

performance = np.arange(len(distritos))

error = np.arange(len(distritos))

plt.barh(y_pos, performance, xerr=error, align='center', alpha=0.4)

plt.yticks(y_pos, distritos )

plt.xlabel('alunos')

plt.grid(True)

plt.title('Numero de vagas por colocar por Distrito')

plt.grid(True)

plt.show()
"""
"""
#Inserir dados

spamReader = csv.reader(open("csvFile.csv", "r"), delimiter=',')
x = 0
for row in spamReader: # Read row of csvFile
	for i in range(0,8):
		row[i] = row[i].replace(",", r'.');
		row[i] = row[i].replace("\\", r'\\\\');
		row[i] = row[i].decode("utf-8")
		pass
	try:
		dado = Dados(row[0], row[1],row[2], row[3], row[4], row[5], row[6], row[7], row[8])
		session.add(dado)
		session.commit()
	except Exception, err:
		print err
		print row
		x = 1
"""
